// 工具类
import store from '../store'
import { getItem } from './auth'

/**
 * 深复制
 * @export
 * @param {*} source
 * @returns
 */
export function copy(source) {
  if (!source && typeof source !== 'object') {
    throw new Error('error arguments', 'shallowClone')
  }
  const targetObj = source.constructor === Array ? [] : {}
  for (const keys in source) {
    if (source.hasOwnProperty(keys)) {
      if (source[keys] && typeof source[keys] === 'object') {
        targetObj[keys] = source[keys].constructor === Array ? [] : {}
        targetObj[keys] = copy(source[keys])
      } else {
        targetObj[keys] = source[keys]
      }
    }
  }
  return targetObj
}

/**
 *判断是否为空
 *
 * @export
 * @param {*} val 字符串 对象
 * @returns
 */
export function isEmpty(val) {
  if (val === undefined || val === null || val === '' || val.length === 0) {
    return true
  }
  if (typeof val === 'string') {
    if (val.trim().length === 0) return true
  } else if (typeof val === 'object') {
    if (JSON.stringify(val) === '{}') return true
  }
  return false
}

/**
 * 格式话日期
 *
 * @export date
 * @param {*} pattern
 * @returns
 */
export function formatDate(date, pattern) {
  let newDate = new Date(date)
  let o = {
    'M+': newDate.getMonth() + 1, // 月份
    'd+': newDate.getDate(), // 日
    'h+': newDate.getHours(), // 小时
    'm+': newDate.getMinutes(), // 分
    's+': newDate.getSeconds(), // 秒
    'q+': Math.floor((newDate.getMonth() + 3) / 3), // 季度
    S: newDate.getMilliseconds(), // 毫秒
  }

  if (/(y+)/.test(pattern)) pattern = pattern.replace(RegExp.$1, (newDate.getFullYear() + '').substr(4 - RegExp.$1.length))
  for (var k in o) {
    if (new RegExp('(' + k + ')').test(pattern)) pattern = pattern.replace(RegExp.$1, RegExp.$1.length === 1 ? o[k] : ('00' + o[k]).substr(('' + o[k]).length))
  }
  return pattern
}

/**
 *更新对象值
 *
 * @export
 * @param {*} original
 * @param {*} obj
 * @returns
 */
 export function setKeyValue(original, obj) {
  for (const key in obj) {
      original[key] = obj[key]
  }
  return original
}

/**
* 删除缓存
* @param {*} options
* @returns
*/
export function dropCachePages(options) {
  return store.dispatch('user/delCachedPages', options)
}

/**
* 删除页签
* @param {*} options
* @returns
*/
export function dropTabsViewPages(options) {
  return store.dispatch('menu/dropTabsViewPages', options)
}

/**
* 判断是否有权限
*
* @param {*} code
* @returns
* @memberof Base
*/
export function hasPermission(code) {
  let roles = JSON.parse(getItem('roles'))
  return roles.includes(code)
}

/**
* 页面判断是否显示按钮
*/
export function isShowBtnPermission(status, code) {
  return status && hasPermission(code)
}

/**
* 获取第一个路由
*/
export function getFirstMenuRoute() {
  let menus = JSON.parse(getItem('menus'))
  if (menus && menus.length) {
      for (let item of menus) {
          if (item.children) {
              for (let v of item.children) {
                  if (v.children) {
                      for (let i of v.children) {
                          if (!i.children) {
                              return i.route
                          }
                      }
                  } else {
                      return v.route
                  }
              }
          } else {
              return item.route
          }
      }
  }
}

/**
* 设置 tabs 文案
* @param {*} name
*/
export function setTabsName(name) {
  store.dispatch('menu/setTabsName', name)
}
